/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.evangelion.core.controller;

import com.evangelion.core.bean.Seccione;
import com.evangelion.core.bean.Usuario;
import com.evangelion.core.daoImpl.InicioDaoImpl;
import com.evangelion.core.service.InicioService;
import com.evangelion.core.serviceImpl.InicioServiceImpl;
import java.io.IOException;
import java.io.Serializable;
import java.util.List;
import javax.annotation.PostConstruct;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;
import javax.faces.model.SelectItem;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import org.springframework.stereotype.Controller;

/**
 *
 * @author Kellycasma
 */
@ManagedBean
@ViewScoped
public class InicioController implements Serializable {

    private Usuario usuario;
    private String cuenta;
    Usuario reqdObj;
    private boolean sessionExist;
//   InicioService inicioService= new InicioServiceImpl();
    InicioDaoImpl inicioService = new InicioDaoImpl();
    Long tpInmueble;
    List<SelectItem> listTpInmuebles;

    public boolean isSessionExist() {
        return sessionExist;
    }

    public void setSessionExist(boolean sessionExist) {
        this.sessionExist = sessionExist;
    }

    public Usuario getUsuario() {
        return usuario;
    }

    public void setUsuario(Usuario usuario) {
        this.usuario = usuario;
    }

    @PostConstruct
    public void init() {
        usuario = new Usuario();
        getSession();
    }

    public void autenticar() throws IOException {
        Usuario userLogin = getUsuario();
        try {
            Usuario u = inicioService.getExistUser(userLogin.getCuenta(), userLogin.getContrasena());
            System.out.println("....................");
            FacesContext contex = FacesContext.getCurrentInstance();

            if (userLogin.getContrasena().equals(u.getContrasena())) {



                if (u.getGrupo().getId() == 1) {
                    System.out.println("usuario:" + u.getCuenta());
                    System.out.println("cliente:" + u.getCliente().getNombre());
                    System.out.println("secciones:" + u.getCliente().getSeccioneList().size());
                    if (u.getCliente().getSeccioneList().size() == 1) {
                        contex.getExternalContext().redirect("faces/general/misdatos.xhtml");
                    } else {
                        contex.getExternalContext().redirect("faces/general/inicioseccion.xhtml");
                    }
                } else if (u.getGrupo().getId() == 2) {
                    contex.getExternalContext().redirect("faces/PrincipalPublicador.xhtml");
                }

                FacesContext context = FacesContext.getCurrentInstance();
                HttpServletRequest request = (HttpServletRequest) context.getExternalContext().getRequest();
                HttpSession httpSession = request.getSession(false);
                httpSession.setAttribute("UserSession", u);
            } else {
                System.out.println("error...:");
                FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Cuenta o contraseña Incorrecta", " "));

            }
        } catch (Exception e) {
            System.out.println("errorrrrrrrrrrrrrrrr...:" + e);
            FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Cuenta o/y Contraseña Incorrecto", " "));
        }


    }

    public void getSession() {
        // recupero usuario en sesion  
        sessionExist = false;
        FacesContext context = FacesContext.getCurrentInstance();
        HttpServletRequest request = (HttpServletRequest) context.getExternalContext().getRequest();
        HttpSession httpSession = request.getSession(false);
        if (httpSession != null) {
            reqdObj = (Usuario) httpSession.getAttribute("UserSession");
            if (reqdObj != null) {
                sessionExist = true;
                Seccione seccion = (Seccione) httpSession.getAttribute("seccion");
                cuenta = "Bienvenido! " + reqdObj.getCliente().getNombre() + " | " + reqdObj.getGrupo().getNombre() + " | ";
                if (seccion != null) {
                    cuenta = cuenta + "Seccion: " + seccion.getNombre() + " | ";
                }
                System.out.println("USUARIO EN SESION ==> " + reqdObj.getCuenta() + " GRUPO ==> " + reqdObj.getGrupo());
            }
        }
    }

    public boolean exitSessionSeccion() {
        boolean existSeccion = false;
        FacesContext context = FacesContext.getCurrentInstance();
        HttpServletRequest request = (HttpServletRequest) context.getExternalContext().getRequest();
        HttpSession httpSession = request.getSession(false);
        if (httpSession != null) {
            Seccione secci = (Seccione) httpSession.getAttribute("seccion");
            if (secci != null) {
                existSeccion = true;
            }
        }
        return existSeccion;
    }

    public boolean mostrarInforme() {
        boolean valor = false;
        if (exitSessionSeccion()) {
            if (reqdObj.getGrupo().getNombre().equals("Admin")) {
                valor = true;
            }
        }
        return valor;
    }

    public void cerrarSession() throws IOException {
        FacesContext context = FacesContext.getCurrentInstance();
        HttpServletRequest request = (HttpServletRequest) context.getExternalContext().getRequest();
        request.getSession(false).invalidate();
        context.getExternalContext().redirect("../index.xhtml");
    }

    public String getCuenta() {
        return cuenta;
    }

    public void setCuenta(String cuenta) {
        this.cuenta = cuenta;
    }
}
